﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void pointerBubble(char** arr, int len)
{
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - 1 - i; j++)
		{
			//7.比对两个字符串的首字母；*arr=arr[0];	**arr=arr[0][0];一颗星*取地址，两颗星**取值；
				//指针判断，操作排序；
			/*
			* int *p=&a;
			* *(p+1)=a[1];
			*/
			/*
			if (**(arr + j) > **(arr + j + 1))
			{
				char* temp = *(arr + j);
				*(arr + j) = *(arr + j + 1);
				*(arr + j + 1) = temp;
			}*/

			//8.可以把上面的二级指针换成二维数组，会显得简单一些。但不能把所有的二级指针都当成数组来操作，可能会出错。
				//数组判断，操作排序；
			/*
			if (arr[j][0] > arr[j + 1][0])
			{
				char* temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}*/

			//9.一半数组，一半指针；
				//复合判断，操作排序；
			if (*arr[j] > *arr[j + 1])
			{
				char* temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}

//main98：指针实现字符串排序
//1.字符串排序，根据字符串首字符，按照a-z的顺序排序；student tree new bee-->bee new student tree
int main98()
{
	//2.字符串数组arr，存储char*指针类型的数组arr，arr在此表示地址，*arr[0]=arr[0][0]=s;
	//char* arr[] = { "student","tree","new","bee" };
	char* arr[] = { "cshdf","ehsdhf","bjhdjfhd","abee" };

	//3.可理解为二维数组；arr+1,表示跳过了一个一维数组，即跳过了一个字符串；
	/*
	* arr[0][0]
	* student	3.1.arr[0][0]-->s，取s的地址值：&arr[0][0]
	* tree
	* new
	* bee
	*/
	printf("4.输出指针类型char*的数组arr中的arr[0][0]：%c\n", arr[0][0]);//s --> c

	for (int i = 0; i < 4; i++)
	{
		printf("5.输出指针类型的char*的数组arr的值：%s\n", arr[i]);//cshdf ehsdhf bjhdjfhd abee
	}
	pointerBubble(arr, 4);

	for (int i = 0; i < 4; i++)
	{
		printf("6.使用指针冒泡pointerBubble排序后，得到char*类型数组arr的值：%s\n", arr[i]);//abee bjhdjfhd cshdf ehsdhf
	}

	system("pause");
	return EXIT_SUCCESS;
}